Theory of Computation lectures